package tools

import (
	"admin/app/model"
	"github.com/dgrijalva/jwt-go"
)

// 生成 jwt token
func GenerateJWT(user model.User) (string, error) {

	// 创建一个新的 token 对象
	token := jwt.New(jwt.SigningMethodHS256)

	// 设置 claims，即 token 的内容
	claims := token.Claims.(jwt.MapClaims)
	claims["name"] = user.Name
	claims["id"] = user.ID
	

	// 设置签名密钥
	secretKey := []byte("your-secret-key")
	tokenString, err := token.SignedString(secretKey)
	if err != nil {
		return "", err
	}

	return tokenString, nil

}

// 解析 jwt token
func ValidateJWT(tokenString string) (*model.User, error) {
	// 解析 token
	token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
		// 验证签名密钥
		secretKey := []byte("your-secret-key")
		return secretKey, nil
	})
	if err != nil {
		return nil, err
	}

	// 用户 
	var user model.User;

	// 获取
	if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
		user.ID = claims["id"].(string)
		user.Name = claims["name"].(string)
        return &user, nil
    }
 
	return nil, err
}
